package 动态规划.可dp可二分;

import java.util.Arrays;

/**
 */
public class 数组任意对元素差值绝对值最小 {
	
	/**
	 * 写一个纯暴力的写法
	 * 迭代的方式
	 * O(N ^ 2 )
	 */
	public static int violent(int nums[]) {
		int len = nums.length;
		int ans = Integer.MAX_VALUE;
		for(int i = 0;i < len ;i++ ) {
			for(int j = i + 1;j < len;j++) {
				ans = Math.min(ans, Math.abs(nums[j] - nums[i]));
			}
		}
		
		return ans;
	}
	
	/**
	 *O(N log N)
	 *排序之后,  直接  找 相邻 的元素,最小值 必在 相邻 元素之间
	 *,因为 这是排好序的, 最小差值的绝对值, 必在相邻的 元素之间产生! 
	 */
	public static int solution(int nums[]) {
		int len = nums.length;
		int ans = Integer.MAX_VALUE;
		Arrays.sort(nums);
		for(int i = 1;i < len;i++) {
			ans = Math.min(ans, nums[i] - nums[i - 1]);
		}
		return ans;
	}
	
	public static void main(String []args) {
		int nums [] = {1,3,-1,10,-4,19,5,6};
		System.out.println(violent(nums));
		System.out.println(solution(nums));
	}
}
